package leetcode24

type ListNode struct {
	Val  int
	Next *ListNode
}

func swapPairs(head *ListNode) *ListNode {
	headPre := &ListNode{
		Next: head,
	}

	pre := headPre

	for pre != nil && pre.Next != nil && pre.Next.Next != nil {
		swap(pre, pre.Next, pre.Next.Next)
		pre = pre.Next.Next
	}
	return headPre.Next
}

// 1, 2, 3
func swap(pre, cur, next *ListNode) {
	// 1, 3
	pre.Next = next
	// 2 -> 3->next
	cur.Next = next.Next
	// 3 -> 2
	next.Next = cur
}
